chore(migration): remove duplicated code when copying legacy config to new path.
authorCamila Ayres <hello@camilasan.com>
Mon, 17 Mar 2025 16:22:52 +0000 (17:22 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Tue, 15 Apr 2025 20:47:11 +0000 (20:47 +0000)
Signed-off-by: Camila Ayres <hello@camilasan.com>
src/gui/application.cpp
src/gui/application.h

index ecaca4fb37a1b09463ad95a6a110fdad809fe6b9..baa1be1f03680eab698ab7b91c6744a034f6a28d 100644 (file)
@@ -261,54 +261,21 @@ Application::Application(int &argc, char **argv)
     setWindowIcon(_theme->applicationIcon());
 
     if (!ConfigFile().exists()) {
-        setApplicationName(_theme->appNameGUI());
-        QString legacyDir = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/" + APPLICATION_CONFIG_NAME;
-
-        if (legacyDir.endsWith('/')) {
-            legacyDir.chop(1); // macOS 10.11.x does not like trailing slash for rename/move.
-        }
-        setApplicationName(_theme->appName());
-        if (QFileInfo(legacyDir).isDir()) {
-            auto confDir = ConfigFile().configPath();
-
-            // macOS 10.11.x does not like trailing slash for rename/move.
-            if (confDir.endsWith('/')) {
-                confDir.chop(1);
-            }
-
-            qCInfo(lcApplication) << "Migrating old config from" << legacyDir << "to" << confDir;
-
-            if (!QFile::rename(legacyDir, confDir)) {
-                qCWarning(lcApplication) << "Failed to move the old config directory to its new location (" << legacyDir << "to" << confDir << ")";
-
-                // Try to move the files one by one
-                if (QFileInfo(confDir).isDir() || QDir().mkdir(confDir)) {
-                    const QStringList filesList = QDir(legacyDir).entryList(QDir::Files);
-                    qCInfo(lcApplication) << "Will move the individual files" << filesList;
-                    for (const auto &name : filesList) {
-                        if (!QFile::rename(legacyDir + "/" + name,  confDir + "/" + name)) {
-                            qCWarning(lcApplication) << "Fallback move of " << name << "also failed";
-                        }
-                    }
-                }
-            } else {
-#ifndef Q_OS_WIN
-                // Create a symbolic link so a downgrade of the client would still find the config.
-                QFile::link(confDir, legacyDir);
-#endif
-            }
+        if (const auto genericConfigLocation = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/" + APPLICATION_CONFIG_NAME;
+            setupConfigFolderFromLegacyLocation(genericConfigLocation)) {
+            qCWarning(lcApplication) << "Setup of config folder and files from legacy location" << genericConfigLocation << "failed.";
         }
     } else {
-        setupConfigFile();
+        if (const auto appDataLocation = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
+            setupConfigFolderFromLegacyLocation(appDataLocation)) {
+            qCWarning(lcApplication) << "Setup of config folder and files from legacy location" << appDataLocation << "failed.";
+        }
     }
 
-    if (_theme->doNotUseProxy()) {
-        ConfigFile().setProxyType(QNetworkProxy::NoProxy);
-        for (const auto &accountState : AccountManager::instance()->accounts()) {
-            if (accountState && accountState->account()) {
-                accountState->account()->setNetworkProxySetting(Account::AccountNetworkProxySetting::GlobalProxy);
-            }
-        }
+    // try to migrate legacy accounts and folders from a previous client version
+    // only copy the settings and check what should be skipped
+    if (ConfigFile().exists() && !configVersionMigration()) {
+        qCWarning(lcApplication) << "Config version migration was not possible.";
     }
 
     parseOptions(arguments());
@@ -341,12 +308,6 @@ Application::Application(int &argc, char **argv)
     setupLogging();
     setupTranslations();
 
-    // try to migrate legacy accounts and folders from a previous client version
-    // only copy the settings and check what should be skipped
-    if (!configVersionMigration()) {
-        qCWarning(lcApplication) << "Config version migration was not possible.";
-    }
-
     ConfigFile cfg;
     {
         auto shouldExit = false;
@@ -416,6 +377,14 @@ Application::Application(int &argc, char **argv)
     _gui->setupCloudProviders();
 #endif
 
+    if (_theme->doNotUseProxy()) {
+        ConfigFile().setProxyType(QNetworkProxy::NoProxy);
+        for (const auto &accountState : AccountManager::instance()->accounts()) {
+            if (accountState && accountState->account()) {
+                accountState->account()->setNetworkProxySetting(Account::AccountNetworkProxySetting::GlobalProxy);
+            }
+        }
+    }
     _proxy.setupQtProxyFromConfig(); // folders have to be defined first, than we set up the Qt proxy.
 
     connect(AccountManager::instance(), &AccountManager::accountAdded,
@@ -539,7 +508,7 @@ void Application::setupAccountsAndFolders()
     }
 }
 
-void Application::setupConfigFile()
+bool Application::setupConfigFolderFromLegacyLocation(const QString &legacyLocation) const
 {
     // Migrate from version <= 2.4
     setApplicationName(_theme->appNameGUI());
@@ -551,42 +520,41 @@ void Application::setupConfigFile()
     QT_WARNING_POP
     setApplicationName(_theme->appName());
 
-    auto oldDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
-
-    // macOS 10.11.x does not like trailing slash for rename/move.
-    if (oldDir.endsWith('/')) {
-        oldDir.chop(1);
+    auto legacyDir = legacyLocation;
+    if (legacyDir.endsWith('/')) {
+        legacyDir.chop(1); // macOS 10.11.x does not like trailing slash for rename/move.
     }
 
-    if (!QFileInfo(oldDir).isDir()) {
-        return;
+    if (!QFileInfo(legacyDir).isDir()) {
+        return false;
     }
 
     auto confDir = ConfigFile().configPath();
-
-    // macOS 10.11.x does not like trailing slash for rename/move.
     if (confDir.endsWith('/')) {
         confDir.chop(1);
     }
 
-    qCInfo(lcApplication) << "Migrating old config from" << oldDir << "to" << confDir;
-    if (!QFile::rename(oldDir, confDir)) {
-        qCWarning(lcApplication) << "Failed to move the old config directory to its new location (" << oldDir << "to" << confDir << ")";
-
-        // Try to move the files one by one
+    qCInfo(lcApplication) << "Migrating old config from" << legacyDir << "to" << confDir;
+    if (!QFile::rename(legacyDir, confDir)) {
+        qCWarning(lcApplication) << "Failed to move the old config directory" << legacyDir << "to new location" << confDir;
         if (QFileInfo(confDir).isDir() || QDir().mkdir(confDir)) {
-            const QStringList filesList = QDir(oldDir).entryList(QDir::Files);
-            qCInfo(lcApplication) << "Will move the individual files" << filesList;
+            const QStringList filesList = QDir(legacyDir).entryList(QDir::Files);
+            qCInfo(lcApplication) << "Will move the individual files:" << filesList;
+            auto setupCompleted = false;
             for (const auto &name : filesList) {
-                if (!QFile::rename(oldDir + "/" + name,  confDir + "/" + name)) {
-                    qCWarning(lcApplication) << "Fallback move of " << name << "also failed";
+                if (!QFile::rename(legacyDir + "/" + name,  confDir + "/" + name)) {
+                    qCDebug(lcApplication) << "Fallback move of " << name << "also failed";
+                    continue;
                 }
+                setupCompleted = true;
+                qCInfo(lcApplication)  << "Move of " << name << "succeeded.";
             }
+            return setupCompleted;
         }
     } else {
 #ifndef Q_OS_WIN
         // Create a symbolic link so a downgrade of the client would still find the config.
-        QFile::link(confDir, oldDir);
+        return QFile::link(confDir, legacyDir);
 #endif
     }
 }
index c3936da43a45eb7139fbe422fbe04f88f44a636a..c5f07b5f67a982738df4f038148fc99cabf11129 100644 (file)
@@ -113,7 +113,7 @@ private:
     void handleEditLocallyFromOptions();
 
     AccountManager::AccountsRestoreResult restoreLegacyAccount();
-    void setupConfigFile();
+    bool setupConfigFolderFromLegacyLocation(const QString &legacyLocation) const;
     void setupAccountsAndFolders();
 
     /**